package base

import (
	"encoding/json"
	"fmt"
	"go-admin-server/common/biz"
)

const (
	SuccessCode = 200
	SuccessMsg  = "success"
)

type Result struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}

type PageResult struct {
	Result
	PageInfo PageInfo `json:"pageInfo"`
}

type PageInfo struct {
	Page  int `json:"page"`
	Size  int `json:"size"`
	Pages int `json:"pages"`
	Total int `json:"total"`
}

// 将Result转为json字符串
func (r *Result) ToJson() string {
	jsonData, err := json.Marshal(r)
	if err != nil {
		fmt.Println("data转json错误")
	}
	return string(jsonData)
}

// 判断该Result是否为成功状态
func (r *Result) IsSuccess() bool {
	return r.Code == SuccessCode
}

// 返回成功状态的Result
// data 成功附带的数据消息
func Success(data interface{}) *Result {
	return &Result{Code: SuccessCode, Message: SuccessMsg, Data: data}
}

// 返回成功状态的Result
// data 成功不附带数据
func SuccessNoData() *Result {
	return &Result{Code: SuccessCode, Message: SuccessMsg}
}

func Error(bizErr *biz.CustomError) *Result {
	return &Result{Code: bizErr.Code(), Message: bizErr.Error()}
}

// 返回服务器错误Result
func ServerError() *Result {
	return Error(biz.ServerError)
}

func ClientError() *Result {
	return Error(biz.ClientErr)
}

func TokenError() *Result {
	return Error(biz.PermissionErr)
}

func ErrorBy(code int, msg string) *Result {
	return &Result{Code: code, Message: msg}
}
